<?php
/**
 * @package Framework
 * @subpackage Controls
 */

/**
 * Create any HTML element
 * 
 * @package Framework
 * @subpackage Controls
 * @desc 创建html标签的类，$lb{=linebreak}为标签的分隔符，一般用/n换行，代码排版用的，如：<table>分隔符</table>，
 * @access public
 */

class html_element
{
	var $name = '';		
	var $value = '';		
	var $attributes = array();
	var $tagname ='';
	var $innerHTML='';
	var $outerHTML='';
	var $lb = "";
	var $processed=false;
	// $innerHTML为标签所包含的元素，如$tagname是'a',则<a href=''><img src='1.png'></a>中$innerHTML=<img src='1.png'>
	// $outerHTML不仅包括$innerHTML说包含的元素，还包括<a href=''>及</a>的全部
	function html_element($tagname, $innerHTML='', $attributes = array())
	{
		$this->tagname = $tagname;
		$this->innerHTML=$innerHTML;

        foreach ($attributes as $key => $value) {

            $this->set_attribute($key, $value);

        }

	}
	// html标签间的分隔符，如<table>分隔符</table>
	function set_linebreak($lb)
	{
		$this->lb=$lb;
	}
	// 本意是添加一个HTML标签的属性及值，如在<font color='red'>1</font>中的color属性及red值
	function set_attribute($name, $value)
	{
		$this->attributes[$name]=$value;
	}		
	// 在标签中插入一个html控件或元素。如<a href='1.php'></a>中加入一个图片，<a href='1.php'><img src='1.png'></a>。
	function add_html_element(&$element)
	{
		$this->innerHTML .= $element->get_html();
	}
	// 在标签外面加入一个html控件
	function add_outerhtml_element(&$element)
	{
		$this->outerHTML .= $element->get_html();
	}
	// 设置提示标签
	function set_tooltip($tooltip, $show_event='onmouseover', $hide_event='onmouseout')
	{
		$this->set_attribute($show_event, $tooltip->show_command);// $tooltip->show_command显示标签
		$this->set_attribute($hide_event, $tooltip->hide_command);// $tooltip->show_command隐藏标签
	}
	// 最主要的方法，就是将以上的属性合并后输出一个html代码
	function get_html()
	{
		if(!$this->processed)
		{
			$this->processed=true;
				
			$this->outerHTML .= '<'.$this->tagname;
			foreach($this->attributes as $name=>$value)
			{
				$this->outerHTML .= ' '.$name.'="'.htmlspecialchars($value).'"';
			}
			
			if($this->innerHTML == '')
			{
				$this->outerHTML .= ' />';
			}else
			{
				$this->outerHTML .= '>'.$this->innerHTML.'</'.$this->tagname.'>'.$this->lb;
			}
		}
		return $this->outerHTML;
	}
}
